package com.five.pojo.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 订单主表实体类
 */
@Data
@TableName("gxa_order")  // 表名是关键字order，需要用反引号包裹
public class Order implements java.io.Serializable{

    /**
     * 订单ID（主键）
     */
    @TableId(type = IdType.AUTO)  // 自增主键
    private Long id;

    /**
     * 订单编号（唯一）
     */
    @TableField("order_no")
    private String orderNo;

    /**
     * 用户ID（关联用户表）
     */
    @TableField("user_id")
    private Long userId;

    /**
     * 订单总金额（单位：元）
     */
    @TableField("total_amount")
    private BigDecimal totalAmount;

    /**
     * 实付金额（扣除优惠后）
     */
    @TableField("pay_amount")
    private BigDecimal payAmount;

    /**
     * 优惠金额
     */
    @TableField("discount_amount")
    private BigDecimal discountAmount;

    /**
     * 运费金额
     */
    @TableField("freight_amount")
    private BigDecimal freightAmount;

    /**
     * 订单状态：0-待付款，1-待发货，2-待收货，3-已完成，4-已取消，5-退款中，6-已退款
     */
    @TableField("order_status")
    private Integer orderStatus;

    /**
     * 支付方式：1-微信支付，2-支付宝，3-银行卡，4-货到付款
     */
    @TableField("pay_type")
    private Integer payType;

    /**
     * 支付时间
     */
    @TableField("pay_time")
    private LocalDateTime payTime;

    /**
     * 发货时间
     */
    @TableField("delivery_time")
    private LocalDateTime deliveryTime;

    /**
     * 确认收货时间
     */
    @TableField("receive_time")
    private LocalDateTime receiveTime;

    /**
     * 取消时间
     */
    @TableField("cancel_time")
    private LocalDateTime cancelTime;

    /**
     * 退款时间
     */
    @TableField("refund_time")
    private LocalDateTime refundTime;

    /**
     * 收货人姓名
     */
    @TableField("receiver_name")
    private String receiverName;

    /**
     * 收货人电话
     */
    @TableField("receiver_phone")
    private String receiverPhone;

    /**
     * 收货地址
     */
    @TableField("receiver_address")
    private String receiverAddress;

    /**
     * 订单备注
     */
    @TableField("remark")
    private String remark;

    /**
     * 乐观锁版本号（防并发修改）
     */
    @Version  // MyBatis-Plus乐观锁注解，自动实现版本控制
    private Integer version;

    @TableField
    private  String expressNo;


    @TableField
    private  String expressCompany;

    @TableField
    private  String expressRemark;
    /**
     * 创建时间
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)  // 插入时自动填充
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)  // 插入和更新时自动填充
    private LocalDateTime updateTime;

}